export const getAllUrlParams = (url) => {
  // 用JS拿到URL，如果函数接收了URL，那就用函数的参数。如果没传参，就使用当前页面的URL
  let queryString = url ? url.split('?')[1] : window.location.search.slice(1);
  // 用来存储我们所有的参数
  const obj = {};
  // 如果没有传参，返回一个空对象
  if (!queryString) {
    return obj;
  }
  // stuff after # is not part of query string, so get rid of it
  queryString = queryString.split('#')[0];
  // 将参数分成数组
  const arr = queryString.split('&');
  for (let i = 0; i < arr.length; i++) {
    // 分离成key:value的形式
    const a = arr[i].split('=');
    // 将undefined标记为true
    const paramName = a[0];
    const paramValue = typeof a[1] === 'undefined' ? true : a[1];
    // 如果调用对象时要求大小写区分，可删除这两行代码
    // paramName = paramName.toLowerCase();
    // if (typeof paramValue === 'string') paramValue = paramValue.toLowerCase();
    // 如果paramName以方括号结束, e.g. colors[] or colors[2]
    if (paramName.match(/\[(\d+)?\]$/)) {
      // 如果paramName不存在，则创建key
      const key = paramName.replace(/\[(\d+)?\]/, '');
      if (!obj[key]) obj[key] = [];
      // 如果是索引数组 e.g. colors[2]
      if (paramName.match(/\[\d+\]$/)) {
        // 获取索引值并在对应的位置添加值
        const index = /\[(\d+)\]/.exec(paramName)[1];
        obj[key][index] = paramValue;
      } else {
        // 如果是其它的类型，也放到数组中
        obj[key].push(paramValue);
      }
    } else {
      // 处理字符串类型
      // eslint-disable-next-line no-lonely-if
      if (!obj[paramName]) {
        // 如果如果paramName不存在，则创建对象的属性
        obj[paramName] = paramValue;
      } else if (obj[paramName] && typeof obj[paramName] === 'string') {
        // 如果属性存在，并且是个字符串，那么就转换为数组
        obj[paramName] = [obj[paramName]];
        obj[paramName].push(paramValue);
      } else {
        // 如果是其它的类型，还是往数组里丢
        obj[paramName].push(paramValue);
      }
    }
  }
  return obj;
};

export const returnNumText = (data) => {
  if (data !== 0 && !data) return 'none';
  if (data === 0) {
    return 'default';
  } else if (data <= 10) {
    return 'less';
  } else if (data <= 100) {
    return 'middle';
  } else {
    return 'large';
  }
};

export const returnTypeName = (type) => {
  // eslint-disable-next-line max-len
  // type === 'code' ? 'code_snippet' : type === 'repo' ? 'code_repo' : type === 'commit' ? 'code_commit' : 'code_mr'
  switch (type) {
    case 'code':
      return 'code_snippet';
    case 'repo':
      return 'code_repo';
    case 'commit':
      return 'code_commit';
    default:
      return 'code_mr';
  }
};
